package persistencia;

import java.sql.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.Despesa;
import modelo.Exercicio;
import modelo.Subcategoria;

/**
 *
 * @author 2006244090165
 */
public class DespesasDAO {

    //salva dados da pessoa no banco
    public static boolean salvar(Despesa despesa) {
        boolean retorno = false;
        try {
            Connection con = Conexao.getConexao();
            PreparedStatement stmt =
                    con.prepareStatement("insert into \n" +
                    "DESPESAS ( DESCRICAO , DATA, VALOR , ID_SUBCATEGORIA , ID_EXERCICIO ) values (?, ?, ?, ?, ?)");

            stmt.setString(1, despesa.getDescricao());

            java.util.Date dataUtil = despesa.getData();
            java.sql.Date dataSql = new java.sql.Date(dataUtil.getTime());
            stmt.setDate(2, dataSql);

            stmt.setFloat(3, despesa.getValor());

            Subcategoria subcategoria = despesa.getSubcategoria();
            stmt.setInt(4, subcategoria.getId_subcategoria());

            Exercicio exercicio = despesa.getExercicio();
            stmt.setInt(5, exercicio.getId_exercicio());

            stmt.executeUpdate();
            retorno = true;

        } catch (SQLException ex) {
            System.err.println(ex);
        } finally {
            System.out.println();
            Conexao.desconecta();
        }

        return retorno;
    }

    public static Vector getDespesas() {

        Vector vp = new Vector();

        try {
            Connection con = Conexao.getConexao();
            Statement stmt =
                    con.createStatement();
            String query = ("select * from DESPESAS");
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()) {
                Despesa despesa = new Despesa();
                despesa.setId(Integer.parseInt(rs.getString("ID_DESPESAS")));
                despesa.setDescricao(rs.getString("DESCRICAO"));
                despesa.setData(rs.getDate("DATA"));
                despesa.setValor(rs.getFloat("VALOR"));
                vp.add(despesa);
            }
            Conexao.desconecta();
        } catch (SQLException ex) {
            System.out.println("Problemas com o BD:");
            ex.printStackTrace();
        }
        return vp;
    }

    public static boolean excluir(int id) {
        boolean retorno = false;
        try {
            Connection con = Conexao.getConexao();
            Statement stmt = con.createStatement();
            String query = "delete from DESPESAS where ID_DESPESAS = " + id;

            stmt.executeUpdate(query);
            retorno = true;
        } catch (SQLException ex) {
            System.err.println(ex);
        } finally {
            Conexao.desconecta();
        }
       return retorno;
    }

    public static Despesa getRecupera(int id_despesas) {
        Despesa despesa = new Despesa();

        try {
            Connection con = Conexao.getConexao();
            Statement stmt =
                    con.createStatement();
            String query = ("select * from DESPESAS where ID_DESPESAS=" + id_despesas);
            ResultSet rs = stmt.executeQuery(query);
            while (rs.next()) {
                despesa.setId(Integer.parseInt(rs.getString("ID_DESPESAS")));
                despesa.setDescricao(rs.getString("DESCRICAO"));
                despesa.setData(rs.getDate("DATA"));
                despesa.setValor(rs.getFloat("VALOR"));
                
                int id_subcategoria = rs.getInt("id_subcategoria");
                Subcategoria subcat = SubcategoriaDAO.getSubcategoria(id_subcategoria);
                despesa.setSubcategoria(subcat);
                
                int id_exercicio = rs.getInt("id_exercicio");
                Exercicio exec = ExercicioDAO.getExercicio(id_exercicio);
                despesa.setExercicio(exec);

            }
            con.close();
        } catch (SQLException ex) {
            System.out.println("Problemas com o BD:");
            ex.printStackTrace();
        }
        return despesa;
    }

    public static boolean editarDespesa(Despesa despesa) {
        boolean retorno = false;
        try {
            Connection con = Conexao.getConexao();
            PreparedStatement stmt =
                    con.prepareStatement("UPDATE DESPESAS SET \n" +
                    "DESCRICAO=?, DATA=?, VALOR=?, ID_SUBCATEGORIA=?, ID_EXERCICIO=?" +
                    "WHERE ID_DESPESAS=?");

            stmt.setString(1, despesa.getDescricao());

            java.util.Date dataUtil = despesa.getData();
            java.sql.Date dataSql = new java.sql.Date(dataUtil.getTime());
            stmt.setDate(2, dataSql);

            stmt.setFloat(3, despesa.getValor());

            Subcategoria subcategoria = despesa.getSubcategoria();
            stmt.setInt(4, subcategoria.getId_subcategoria());

            Exercicio exercicio = despesa.getExercicio();
            stmt.setInt(5, exercicio.getId_exercicio());
            
            stmt.setInt(6, despesa.getId());
            stmt.executeUpdate();
            retorno = true;

        } catch (SQLException ex) {
            System.err.println(ex);
        } finally {
            System.out.println();
            Conexao.desconecta();
        }

        return retorno;
        
    }

}